# 给你两个二进制字符串，返回它们的和（用二进制表示）。
#  输入为 非空 字符串且只包含数字 1 和 0。
#
#  示例 1:
#  输入: a = "11", b = "1"
# 输出: "100"
#
#  示例 2:
#  输入: a = "1010", b = "1011"
# 输出: "10101"
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        res = []
        lenA, lenB = len(a), len(b)
        n, carry = max(lenA, lenB), 0
        for i in range(n):
            x = (ord(a[lenA - 1 - i]) - ord('0'))if i < lenA else 0
            y = (ord(b[lenB - 1 - i]) - ord('0')) if i < lenB else 0
            s = x + y + carry
            res.append(str(s % 2))
            carry = s // 2
        if carry > 0:
            res.append('1')
        return ''.join(res)[::-1]


if __name__ == '__main__':
    a, b = "1010", "1011"
    a, b = "11", "1"
    # print(a[::-1])
    print(Solution().addBinary(a, b))
